]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
AccessibilityMenu: hide when not needed
authorGiovanni Campagna <gcampagna@src.gnome.org>
Mon, 13 Aug 2012 17:04:03 +0000 (19:04 +0200)
committerGiovanni Campagna <gcampagna@src.gnome.org>
Tue, 19 Feb 2013 21:07:08 +0000 (22:07 +0100)
Tie the menu visibility to having at least one a11y feature enabled.

https://bugzilla.gnome.org/show_bug.cgi?id=681528

js/ui/panel.js
js/ui/sessionMode.js
js/ui/status/accessibility.js

index 3bcc4ba1a5a5242aea64bf0aa5ca30d22bffbc56..7153abdff753217c2494582e896c9c657fbee5e6 100644 (file)
@@ -919,6 +919,7 @@ const PANEL_ITEM_IMPLEMENTATIONS = {
     'appMenu': AppMenuButton,
     'dateMenu': imports.ui.dateMenu.DateMenuButton,
     'a11y': imports.ui.status.accessibility.ATIndicator,
+    'a11yGreeter': imports.ui.status.accessibility.ATGreeterIndicator,
     'volume': imports.ui.status.volume.Indicator,
     'battery': imports.ui.status.power.Indicator,
     'lockScreen': imports.ui.status.lockScreenMenu.Indicator,
index f802dbd29f362bd708d512e2507120d11bf28dae..e926ba2e73dbfe8717b643a0c11d457faabb65d9 100644 (file)
@@ -47,7 +47,7 @@ const _modes = {
         panel: {
             left: ['logo'],
             center: ['dateMenu'],
-            right: ['a11y', 'display', 'keyboard',
+            right: ['a11yGreeter', 'display', 'keyboard',
                     'volume', 'battery', 'powerMenu']
         },
         panelStyle: 'login-screen'
@@ -84,7 +84,7 @@ const _modes = {
         panel: {
             left: [],
             center: ['dateMenu'],
-            right: ['a11y', 'keyboard', 'volume']
+            right: ['a11yGreeter', 'keyboard', 'volume']
         }
     },
 
index 804b7d2f3080d18fe80f3b1b3e0938fe15a3f2a9..479a15a70b13637eaca30640bb46a5541e6670e9 100644 (file)
@@ -2,6 +2,7 @@
 
 const Gio = imports.gi.Gio;
 const Lang = imports.lang;
+const Mainloop = imports.mainloop;
 
 const PanelMenu = imports.ui.panelMenu;
 const PopupMenu = imports.ui.popupMenu;
@@ -69,6 +70,25 @@ const ATIndicator = new Lang.Class({
 
         this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
         this.menu.addSettingsAction(_("Universal Access Settings"), 'gnome-universal-access-panel.desktop');
+
+        this._syncMenuVisibility();
+    },
+
+    _syncMenuVisibility: function() {
+        this._syncMenuVisibilityIdle = 0;
+
+        let items = this.menu._getMenuItems();
+
+        this.actor.visible = items.some(function(f) { return !!f.state; });
+
+        return false;
+    },
+
+    _queueSyncMenuVisibility: function() {
+        if (this._syncMenuVisibilityIdle)
+            return;
+
+        this._syncMenuVisbilityIdle = Mainloop.idle_add(Lang.bind(this, this._syncMenuVisibility));
     },
 
     _buildItemExtended: function(string, initial_value, writable, on_set) {
@@ -90,9 +110,11 @@ const ATIndicator = new Lang.Class({
             function(enabled) {
                 return settings.set_boolean(key, enabled);
             });
-        settings.connect('changed::'+key, function() {
+        settings.connect('changed::'+key, Lang.bind(this, function() {
             widget.setToggleState(settings.get_boolean(key));
-        });
+
+            this._queueSyncMenuVisibility();
+        }));
         return widget;
     },
 
@@ -124,7 +146,7 @@ const ATIndicator = new Lang.Class({
                     wmSettings.reset(KEY_WM_THEME);
                 }
             });
-        interfaceSettings.connect('changed::' + KEY_GTK_THEME, function() {
+        interfaceSettings.connect('changed::' + KEY_GTK_THEME, Lang.bind(this, function() {
             let value = interfaceSettings.get_string(KEY_GTK_THEME);
             if (value == HIGH_CONTRAST_THEME) {
                 highContrast.setToggleState(true);
@@ -132,7 +154,9 @@ const ATIndicator = new Lang.Class({
                 highContrast.setToggleState(false);
                 gtkTheme = value;
             }
-        });
+
+            this._queueSyncMenuVisibility();
+        }));
         interfaceSettings.connect('changed::' + KEY_ICON_THEME, function() {
             let value = interfaceSettings.get_string(KEY_ICON_THEME);
             if (value != HIGH_CONTRAST_THEME)
@@ -161,11 +185,22 @@ const ATIndicator = new Lang.Class({
                 else
                     settings.reset(KEY_TEXT_SCALING_FACTOR);
             });
-        settings.connect('changed::' + KEY_TEXT_SCALING_FACTOR, function() {
+        settings.connect('changed::' + KEY_TEXT_SCALING_FACTOR, Lang.bind(this, function() {
             let factor = settings.get_double(KEY_TEXT_SCALING_FACTOR);
             let active = (factor > 1.0);
             widget.setToggleState(active);
-        });
+
+            this._queueSyncMenuVisibility();
+        }));
         return widget;
     }
 });
+
+const ATGreeterIndicator = new Lang.Class({
+    Name: 'ATGreeterIndicator',
+    Extends: ATIndicator,
+
+    // Override visibility handling to be always visible
+    _syncMenuVisibility: function() { },
+    _queueSyncMenuVisibility: function() { }
+});